import { FundSearchResult, FundDetail, FundHistoryData } from '../types/investment';

// 天天基金API响应类型
interface EastmoneyFundData {
  CODE: string;
  NAME: string;
  TYPE: string;
  PY: string;
}

interface EastmoneyResponse {
  Datas: EastmoneyFundData[];
}

// 天天基金详情API响应类型
interface FundDetailResponse {
  fundcode: string;
  name: string;
  dwjz: string;
  gszzl: string;
  gztime: string;
}

// 基金搜索服务
export class FundSearchService {
  
  /**
   * 搜索基金（天天基金网API）
   * @param keyword - 搜索关键词（基金代码或名称）
   * @returns 基金列表
   */
  static async searchFunds(keyword: string): Promise<FundSearchResult[]> {
    if (!keyword || keyword.trim().length < 2) {
      return [];
    }

    try {
      // 使用天天基金网的搜索API
      const response = await fetch(
        `http://fundsuggest.eastmoney.com/FundSearch/api/FundSearchAPI.ashx?m=1&key=${encodeURIComponent(keyword)}&_=${Date.now()}`,
        {
          method: 'GET',
          mode: 'cors', // 注意：可能需要代理来解决跨域问题
        }
      );

      if (!response.ok) {
        throw new Error('搜索请求失败');
      }

      const text = await response.text();
      
      // 天天基金返回的是JSONP格式，需要解析
      const jsonMatch = text.match(/\((.*)\)/);
      if (!jsonMatch) {
        return [];
      }

      const data: EastmoneyResponse = JSON.parse(jsonMatch[1]);
      
      if (data && data.Datas && Array.isArray(data.Datas)) {
        return data.Datas.map(fund => ({
          code: fund.CODE,
          name: fund.NAME,
          type: fund.TYPE,
          pinyin: fund.PY,
          fullName: fund.NAME
        })).slice(0, 10); // 限制返回10个结果
      }

      return [];
    } catch (error) {
      console.warn('天天基金API搜索失败，尝试备用方案:', error);
      return this.searchFundsBackup(keyword);
    }
  }

  /**
   * 备用搜索方案（新浪财经API）
   */
  static async searchFundsBackup(keyword: string): Promise<FundSearchResult[]> {
    try {
      const response = await fetch(
        `https://suggest3.sinajs.cn/suggest/type=11,12&key=${encodeURIComponent(keyword)}&name=suggestdata`,
        {
          method: 'GET',
          mode: 'cors',
        }
      );

      if (!response.ok) {
        throw new Error('备用搜索请求失败');
      }

      const text = await response.text();
      
      // 新浪返回格式：var suggestdata="a,b,c";
      const dataMatch = text.match(/="(.*)"/);
      if (!dataMatch || !dataMatch[1]) {
        return [];
      }

      const items = dataMatch[1].split(';').filter(item => item.trim());
      
      return items.map(item => {
        const parts = item.split(',');
        if (parts.length >= 6) {
          return {
            code: parts[3],
            name: parts[4],
            type: '基金',
            pinyin: parts[5] || '',
            fullName: parts[4]
          };
        }
        return null;
      }).filter((item): item is FundSearchResult => item !== null).slice(0, 10);

    } catch (error) {
      console.warn('备用搜索也失败了:', error);
      return this.getMockFundData(keyword);
    }
  }

  /**
   * 模拟基金数据（当API都不可用时）
   */
  static getMockFundData(keyword: string): FundSearchResult[] {
    const mockFunds: FundSearchResult[] = [
      { code: '000001', name: '华夏成长混合', type: '混合型', pinyin: 'hxczhh', fullName: '华夏成长混合型证券投资基金' },
      { code: '110022', name: '易方达消费行业股票', type: '股票型', pinyin: 'yfdxfhygp', fullName: '易方达消费行业股票型证券投资基金' },
      { code: '161725', name: '招商中证白酒指数', type: '指数型', pinyin: 'zszzbjzs', fullName: '招商中证白酒指数分级证券投资基金' },
      { code: '320007', name: '诺安成长混合', type: '混合型', pinyin: 'nachh', fullName: '诺安成长混合型证券投资基金' },
      { code: '001594', name: '天弘中证食品饮料指数', type: '指数型', pinyin: 'thzzspylzs', fullName: '天弘中证食品饮料指数型发起式证券投资基金' },
      { code: '005827', name: '易方达蓝筹精选混合', type: '混合型', pinyin: 'yfdlcjxhh', fullName: '易方达蓝筹精选混合型证券投资基金' },
      { code: '110011', name: '易方达中小盘混合', type: '混合型', pinyin: 'yfdzxphh', fullName: '易方达中小盘混合型证券投资基金' },
      { code: '000478', name: '建信中证红利指数增强', type: '指数型', pinyin: 'jszzhlzszq', fullName: '建信中证红利指数增强型证券投资基金' },
      { code: '001102', name: '前海开源国家比较优势混合', type: '混合型', pinyin: 'qhkygjbjyshh', fullName: '前海开源国家比较优势混合型证券投资基金' },
      { code: '260108', name: '景顺长城新兴成长混合', type: '混合型', pinyin: 'jsccxxczhh', fullName: '景顺长城新兴成长混合型证券投资基金' }
    ];

    const lowerKeyword = keyword.toLowerCase();
    return mockFunds.filter(fund => 
      fund.code.includes(keyword) || 
      fund.name.includes(keyword) ||
      fund.pinyin.includes(lowerKeyword)
    ).slice(0, 10);
  }

  /**
   * 获取基金详细信息
   * @param fundCode - 基金代码
   * @returns 基金详细信息
   */
  static async getFundDetail(fundCode: string): Promise<FundDetail | null> {
    try {
      // 使用天天基金的基金详情API
      const response = await fetch(
        `http://fundgz.1234567.com.cn/js/${fundCode}.js?rt=${Date.now()}`,
        {
          method: 'GET',
          mode: 'cors',
        }
      );

      if (!response.ok) {
        throw new Error('获取基金详情失败');
      }

      const text = await response.text();
      
      // 解析JSONP格式
      const jsonMatch = text.match(/jsonpgz\((.*)\)/);
      if (!jsonMatch) {
        return null;
      }

      const data: FundDetailResponse = JSON.parse(jsonMatch[1]);
      
      return {
        code: data.fundcode,
        name: data.name,
        currentPrice: parseFloat(data.dwjz) || 0, // 当日净值
        previousPrice: parseFloat(data.dwjz) || 0,
        changePercent: parseFloat(data.gszzl) || 0, // 估算涨跌幅
        updateTime: data.gztime,
        type: '基金'
      };

    } catch (error) {
      console.warn('获取基金详情失败:', error);
      return null;
    }
  }

  /**
   * 获取基金历史净值数据（用于计算最大回撤）
   * @param fundCode - 基金代码
   * @returns 包含历史数据和最大回撤
   */
  static async getFundHistoryData(fundCode: string): Promise<FundHistoryData> {
    try {
      // 这里可以调用更详细的历史数据API
      // 由于免费API限制，这里返回模拟的最大回撤数据
      const mockDrawdowns: Record<string, number> = {
        '000001': -25.6,
        '110022': -32.1,
        '161725': -45.2,
        '320007': -28.9,
        '001594': -35.4,
        '005827': -29.7,
        '110011': -31.2,
        '000478': -22.8,
        '001102': -38.5,
        '260108': -33.7
      };

      return {
        maxDrawdown: mockDrawdowns[fundCode] || -30.0,
        dataSource: '历史数据分析',
        period: '近3年'
      };

    } catch (error) {
      console.warn('获取历史数据失败:', error);
      return {
        maxDrawdown: -30.0,
        dataSource: '默认估算',
        period: '参考值'
      };
    }
  }
}